﻿using System.Windows.Media;
using WPFSchematics.Definition.Entities;
using WPFSchematics.Definition.Entities.Collection;
using WPFSchematics.Definition.Layers;
using WPFSchematics.Definition.Templates;
using System;
using System.Windows;

namespace WPFSchematics.Definition.Shapes
{
    /// <summary>
    /// 图元提供器接口。该接口用于图元内容的描述，包括，图元内容（轮廓、样式）。
    /// </summary>
    public interface IShapeProvider :IEntity, IShapeTransform, IShapeState
    {
        /// <summary>
        /// 
        /// </summary>
        bool GhostValided { get; set; }
        /// <summary>
        /// 
        /// </summary>
        ScaleMode ScaleMode { set; get; }
        /// <summary>
        /// 图元样式。
        /// </summary>
        IShapeTemplate ShapeTemplate { set; get; }
        /// <summary>
        /// 样式。
        /// </summary>
        Style Style { set; get; }
        /// <summary>
        /// 所属图元组。
        /// </summary>
        IShapeGroup ShapeGroup { get; set; }
        /// <summary>
        /// 图形内容。
        /// </summary>
        Drawing ShapeContext { get; }
        /// <summary>
        /// 所属图元提供器图层。
        /// </summary>
        IShapeProviderStaticLeafLayer Layer { set; get; }
        /// <summary>
        /// 图元呈现器。
        /// </summary>
        ShapePresenterCollection ShapePresenters { get; }
        /// <summary>
        /// 图元提供器类型。
        /// </summary>
        ProviderType ProviderType { get; }
        /// <summary>
        /// 图元选择状态变更事件。
        /// </summary>
        event EventHandler SelectedStateChanged;
        /// <summary>
        /// 销毁。
        /// </summary>
        void Dispose();
    }


    /// <summary>
    /// 图元重绘级别。
    /// </summary>
    public enum ReDrawLevel
    {
        /// <summary>
        /// 轮廓。
        /// </summary>
        Outline,
        /// <summary>
        /// 渲染。
        /// </summary>
        Render,
        /// <summary>
        /// 状态。
        /// </summary>
        State,
        /// <summary>
        /// 呈现。
        /// </summary>
        Presenter,
        /// <summary>
        /// 完成。
        /// </summary>
        Complete
    }

    /// <summary>
    /// 图元类型。
    /// </summary>
    public enum ProviderType
    { 
        /// <summary>
        /// 节点。
        /// </summary>
        LayoutNode = -2,
        /// <summary>
        /// 边。
        /// </summary>
        Edge = -1,
        /// <summary>
        /// 端子。
        /// </summary>
        Terminal = 0,
        /// <summary>
        /// 设备。
        /// </summary>
        Feature = 1,
        /// <summary>
        /// 几何路径。
        /// </summary>
        Symbol = 2,
        /// <summary>
        /// 文本。
        /// </summary>
        Text = 3,
        /// <summary>
        /// 精细文本。
        /// </summary>
        GlyphRun = 4,
        /// <summary>
        /// 线型。
        /// </summary>
        Geometry = 5,
        /// <summary>
        /// 图元合。
        /// </summary>
        Composition = 6,
    }
}
